imwayland: Clamp the surrounding string end correctly
authorCarlos Garnacho <carlosg@gnome.org>
Fri, 3 Apr 2020 10:44:37 +0000 (12:44 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Fri, 3 Apr 2020 17:55:55 +0000 (19:55 +0200)
In the paths where len > MAX_LEN and cursor/anchor are separated by
at least MAX_LEN from text edges, we were clamping the right end of
the surrounding string at MAX_LEN. Oops.

This end anchor may go as far as the string length, although just
up to len - MAX_LEN in real terms (due to the condition above that
caches cursor/anchor positions being near enough the text end).

Closes: https://gitlab.gnome.org/GNOME/gtk/-/issues/2565
(cherry-picked from commit d7fb15c822eabe22ffda19892153d69b0f4fc2f3)

gtk/gtkimcontextwayland.c

index 2462f7201fd36b0a6492f54fd73c331a5e24d596..6c3b2b393a82c9c0d9d73bdd5eaad75d496efd15 100644 (file)
@@ -323,7 +323,7 @@ notify_surrounding_text (GtkIMContextWayland *context)
           mid = MIN (context->surrounding.cursor_idx,
                      context->surrounding.anchor_idx) + (cursor_len / 2);
           a = MAX (0, mid - (MAX_LEN / 2));
-          b = MIN (MAX_LEN, mid + (MAX_LEN / 2));
+          b = MIN (len, mid + (MAX_LEN / 2));
 
           start = &context->surrounding.text[a];
           end = &context->surrounding.text[b];